/**
 * 
 */
package com.dao;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.database.Cursor;

import com.database.TransactionManager;
import com.model.ProdutoBean;

/**
 * @author Isac
 *
 */
public class ProdutoDao {
	
	private String TABLE_PRODUTO      = "produto";
	private String COLN_ID            = "prod_id";
	private String COLN_DESCRICAO     = "prod_descricao";
	private String COLN_CODBARRA      = "prod_codbarra";
	private String COLN_PRODUTO_MARCA = "prom_id";

	public static String createTableProduto(){
		StringBuilder sb = new StringBuilder();
		
		sb.append("  create table produto(                                      ");
		sb.append("    prod_id integer primary key autoincrement,               ");
		sb.append("    prod_descricao text,                                     ");
		sb.append("    prod_codbarra text,                                      ");
		sb.append("    prom_id integer,                                         ");
		sb.append("    foreign key (prom_id) references produtomarca(prom_id)); ");
		
		return sb.toString();
	}
	public void insert(TransactionManager transaction, ProdutoBean prodBean) {
		ContentValues values = new ContentValues();
		values.put(COLN_ID, prodBean.getId());
		values.put(COLN_DESCRICAO, prodBean.getDescricao());
		values.put(COLN_CODBARRA, prodBean.getCodBarra());
		values.put(COLN_PRODUTO_MARCA, prodBean.getProm().getId());
		transaction.prepare().insert(TABLE_PRODUTO, null, values);
	}
	
	public boolean delete(TransactionManager transaction,ProdutoBean prodId){
		return transaction.prepare().delete(TABLE_PRODUTO,COLN_ID +" = "+prodId, null) > 0 ;
		
	}
	
	public long update(TransactionManager transaction, ProdutoBean prodBean ) {
		ContentValues values = new ContentValues();
		values.put(COLN_ID, prodBean.getId());
		values.put(COLN_DESCRICAO, prodBean.getDescricao());
		values.put(COLN_CODBARRA, prodBean.getCodBarra());
		values.put(COLN_PRODUTO_MARCA, prodBean.getProm().getId());
		return transaction.prepare().update(TABLE_PRODUTO, values,COLN_ID +" = "+prodBean.getId(), null);
		
	}
	
	public ProdutoBean openById(TransactionManager transaction, long prodId) {
		StringBuilder sql = new StringBuilder();
		sql.append("        select * from                  ");
		sql.append(          TABLE_PRODUTO                  );
		sql.append("         where "+COLN_ID+" = "+ prodId   );
		ProdutoBean prodBean = new ProdutoBean();
		Cursor cursor = transaction.prepare().rawQuery(sql.toString(), null);
		if (cursor.getCount() > 0) {
			cursor.moveToFirst(); 
			prodBean.setId(cursor.getInt(cursor.getColumnIndex(COLN_ID)));
			prodBean.setDescricao(cursor.getString(cursor.getColumnIndex(COLN_DESCRICAO)));
			prodBean.setCodBarra(cursor.getString(cursor.getColumnIndex(COLN_CODBARRA)));
			prodBean.getProm().setId(cursor.getInt(cursor.getColumnIndex(COLN_PRODUTO_MARCA)));
			cursor.close();
			return prodBean;
		} else {
			cursor.close();
			return null;
		}		
	}
	
	public List<ProdutoBean> getAll(TransactionManager transaction) {
		StringBuilder sql = new StringBuilder();
		sql.append("        select * from                  ");
		sql.append(          TABLE_PRODUTO                  );
		List<ProdutoBean> prodList = new ArrayList<ProdutoBean>();
		Cursor cursor = transaction.prepare().rawQuery(sql.toString(), null);
		while (cursor.moveToNext()) {
			ProdutoBean prodBean = new ProdutoBean();
			prodBean.setId(cursor.getInt(cursor.getColumnIndex(COLN_ID)));
			prodBean.setDescricao(cursor.getString(cursor.getColumnIndex(COLN_DESCRICAO)));
			prodBean.setCodBarra(cursor.getString(cursor.getColumnIndex(COLN_CODBARRA)));
			prodBean.getProm().setId(cursor.getInt(cursor.getColumnIndex(COLN_PRODUTO_MARCA)));
			prodList.add(prodBean);
		} 
			cursor.close();
			return prodList;
	}
	
}
